
package com.joysuch.wwyt.core.service;

import com.joysuch.wwyt.core.bean.BaseAttachmentBean;
import com.joysuch.wwyt.core.bean.dto.FileChunkUploadDTO;
import com.joysuch.wwyt.core.bean.vo.FileChunkCheckVO;
import com.joysuch.wwyt.core.entity.BaseAttachmentRepo;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.util.List;

public interface BaseAttachmentRepositoryService {

    BaseAttachmentRepo findById(Long id);

    /**
     * 保存文件。执行如下操作：
     *
     * <pre>
     * 1. 将文件转移到uploadDir
     * 3. 保存文件记录到数据库，并返回id
     * </pre>
     *
     * 文件命名方式为
     *
     * <pre>
     * 1. 源文件命名，生成UUID(去除-)+"."+扩展名
     *
     * </pre>
     *
     * @param file
     *                      上传的图片文件
     * @param uploadDir
     *                      图片上传目录
     * @return 文件ID
     * @throws IOException
     *                         读写文件出现异常
     * @throws Exception
     *                         读写文件出现异常
     */
    public Long saveFile(MultipartFile file, String uploadDir) throws IOException, Exception;

    public Long saveFile(File file) throws IOException, Exception;

    public BaseAttachmentBean findByIdIntoBean(Long id);

    /**
     * 查询所有的附件信息
     * @param ids
     * @return
     */
    List<BaseAttachmentBean> findByIds(List<Long> ids);

    /**
     * 校验文件，返回已存在分片
     *
     * @param dto {@link FileChunkUploadDTO}
     * @return {@link FileChunkCheckVO}
     */
    FileChunkCheckVO checkFile4ChunkIndex(FileChunkUploadDTO dto);

    /**
     * 文件分片上传
     *
     * @param dto {@link FileChunkUploadDTO}
     * @return
     */
    Long chunkUploadFile(FileChunkUploadDTO dto);

    /**
     * 查找失败的文件
     * @return
     */
    BaseAttachmentRepo findBaseAttachmentRepo(Integer retryCount);
}
